var isIE = (document.all) ? true : false;
var isIE6 = isIE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 6);
var _$ = function (id) {
	return "string" == typeof id ? document.getElementById(id) : id;
};

var Class = {
	create: function() {
		return function() { this.initialize.apply(this, arguments); }
	}
}

var Extend = function(destination, source) {
	for (var property in source) {
		destination[property] = source[property];
	}
}

var Bind = function(object, fun) {
	return function() {
		return fun.apply(object, arguments);
	}
}

var Each = function(list, fun){
	for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); }
};

var Contains = function(a, b){
	return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(b) & 16);
}


var OverLay = Class.create();
OverLay.prototype = {
	initialize: function(options) {
		this.SetOptions(options);
		
		this.Lay = _$(this.options.Lay) || document.body.insertBefore(document.createElement("div"), document.body.childNodes[0]);
		
		this.Color = this.options.Color;
		this.Opacity = parseInt(this.options.Opacity);
		this.zIndex = parseInt(this.options.zIndex);
		
		with(this.Lay.style){ display = "none"; zIndex = this.zIndex; left = top = 0; position = "fixed"; width = height = "100%"; }
		
		if(isIE6){
			this.Lay.style.position = "absolute";
			//ie6设置覆盖层大小程序
			this._resize = Bind(this, function(){
				this.Lay.style.width = Math.max(document.documentElement.scrollWidth, document.documentElement.clientWidth) + "px";
				this.Lay.style.height = Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight) + "px";
			});
			//遮盖select
			this.Lay.innerHTML = '<iframe style="position:absolute;top:0;left:0;width:100%;height:100%;filter:alpha(opacity=0);"></iframe>'
		}
	},
	
	//设置默认属性
	SetOptions: function(options) {
		this.options = { //默认值
			Lay:		null,//覆盖层对象
			Color:		"#000",//背景色
			Opacity:	50,//透明度(0-100)
			zIndex:		1000//层叠顺序
		};
		Extend(this.options, options || {});
	},
	
	//显示
	Show: function() {
		//兼容ie6
		if(isIE6){ this._resize(); window.attachEvent("onresize", this._resize); }
		//设置样式
		with(this.Lay.style){
			//设置透明度
			isIE ? filter = "alpha(opacity:" + this.Opacity + ")" : opacity = this.Opacity / 100;
			backgroundColor = this.Color; display = "block";
		}
	},
	
	//关闭
	Close: function() {
		this.Lay.style.display = "none";
		if(isIE6){ window.detachEvent("onresize", this._resize); }
	}
};



var LightBox = Class.create();

LightBox.prototype = {
	initialize: function(box, options) {
		
		this.Box = _$(box);//显示层
		
		this.OverLay = new OverLay(options);//覆盖层
		
		this.SetOptions(options);
		
		this.Fixed = !!this.options.Fixed;
		this.Over = !!this.options.Over;
		this.Center = !!this.options.Center;
		this.onShow = this.options.onShow;
		
		this.Box.style.zIndex = this.OverLay.zIndex + 1;
		this.Box.style.display = "none";
		
		//兼容ie6用的属性
		if(isIE6){
			this._top = this._left = 0; this._select = [];
			this._fixed = Bind(this, function(){ this.Center ? this.SetCenter() : this.SetFixed(); });
		}
	},
	
	//设置默认属性
	SetOptions: function(options) {
		this.options = {//默认值
			Over:	true,//是否显示覆盖层
			Fixed:	false,//是否固定定位
			Center:	true,//是否居中
			onShow:	function(){}//显示时执行
		};
		Extend(this.options, options || {});
	},
	
	//兼容ie6的固定定位程序
	SetFixed: function(){
	this.Box.style.top = document.documentElement.scrollTop - this._top + this.Box.offsetTop + "px";
	this.Box.style.left = document.documentElement.scrollLeft - this._left + this.Box.offsetLeft + "px";
	
	this._top = document.documentElement.scrollTop; this._left = document.documentElement.scrollLeft;
	},
  
	//兼容ie6的居中定位程序
	SetCenter: function(){
		this.Box.style.marginTop = document.documentElement.scrollTop - this.Box.offsetHeight / 2 + "px";
		this.Box.style.marginLeft = document.documentElement.scrollLeft - this.Box.offsetWidth / 2 + "px";
	},
  
	//显示
	Show: function(options) {
		//固定定位
		this.Box.style.position = this.Fixed && !isIE6 ? "fixed" : "absolute";
		
		//覆盖层
		this.Over && this.OverLay.Show();
		
		this.Box.style.display = "block";
		
		//居中
		if(this.Center){
			this.Box.style.top = this.Box.style.left = "50%";
			//设置margin
			if(this.Fixed){
				this.Box.style.marginTop = - this.Box.offsetHeight / 2 + "px";
				this.Box.style.marginLeft = - this.Box.offsetWidth / 2 + "px";
			}else{
				this.SetCenter();
			}
		}
		
		//兼容ie6
		if(isIE6){
			if(!this.Over){
				//没有覆盖层ie6需要把不在Box上的select隐藏
				this._select.length = 0;
				Each(document.getElementsByTagName("select"), Bind(this, function(o){
					if(!Contains(this.Box, o)){ o.style.visibility = "hidden"; this._select.push(o); }
				}))
			}
			//设置显示位置
			this.Center ? this.SetCenter() : this.Fixed && this.SetFixed();
			//设置定位
			this.Fixed && window.attachEvent("onscroll", this._fixed);
		}
		
		this.onShow();
	},
	
	//关闭
	Close: function() {
		this.Box.style.display = "none";
		this.OverLay.Close();
		if(isIE6){
			window.detachEvent("onscroll", this._fixed);
			Each(this._select, function(o){ o.style.visibility = "visible"; });
		}
	}
};